In [1]:
import os
os.getcwd()
Out[1]:
'/Users/adityakaul'

Perform the ulimit -a and ulimit -Sn before opening the notebook

Before we read the 801 PNG files we need to increase the allowable limit by mac

Check the current number of files allowed by using ulimit -a

Then use ulimit -Sn 1000 to increase the number of allowed files to 1000

In [2]:
#Ideally create different folders for the mons so that you can call only the ones needed for analysis

from PIL import Image
import glob
image_list = []

for filename in glob.glob('/Users/adityakaul/pokemon_data/POKEMON/*.png'): #assuming png
    im=Image.open(filename)
    image_list.append(im)
In [305]:
len(image_list)
#Show the image at the lcoation 103
#image_list[103]
Out[305]:
801
In [306]:
#Get the pokedex number of the pokemon since they are randomly present in the list
names = glob.glob('/Users/adityakaul/pokemon_data/POKEMON/*.png')
names[0]
Out[306]:
'/Users/adityakaul/pokemon_data/POKEMON/0298.png'
In [350]:
pokedex_no = []
for val in names:
    pokedex_no.append(val[40:43].lstrip("0"))
len(pokedex_no)
Out[350]:
801
In [308]:
#get the pokedex number at each location in the list
print(pokedex_no[1])
image_list[1]
267
Out[308]:
In [309]:
import pandas as pd
from IPython.display import display

#poke_info.head()

#Get the different features about pokemon from the csv file
poke_info = pd.read_csv("/Users/adityakaul/pokemon_data/pokemon.csv")
pd.options.display.max_columns = None
#display(poke_info)
In [310]:
#display the top 5 rows of data from the dataframe
poke_info.head(5)
Out[310]:
abilities against_bug against_dark against_dragon against_electric against_fairy against_fight against_fire against_flying against_ghost against_grass against_ground against_ice against_normal against_poison against_psychic against_rock against_steel against_water attack base_egg_steps base_happiness base_total capture_rate classfication defense experience_growth height_m hp japanese_name name percentage_male pokedex_number sp_attack sp_defense speed type1 type2 weight_kg generation is_legendary
0 ['Overgrow', 'Chlorophyll'] 1.0 1.0 1.0 0.5 0.5 0.5 2.0 2.0 1.0 0.25 1.0 2.0 1.0 1.0 2.0 1.0 1.0 0.5 49 5120 70 318 45 Seed Pokémon 49 1059860 0.7 45 Fushigidaneフシギダネ Bulbasaur 88.1 1 65 65 45 grass poison 6.9 1 0
1 ['Overgrow', 'Chlorophyll'] 1.0 1.0 1.0 0.5 0.5 0.5 2.0 2.0 1.0 0.25 1.0 2.0 1.0 1.0 2.0 1.0 1.0 0.5 62 5120 70 405 45 Seed Pokémon 63 1059860 1.0 60 Fushigisouフシギソウ Ivysaur 88.1 2 80 80 60 grass poison 13.0 1 0
2 ['Overgrow', 'Chlorophyll'] 1.0 1.0 1.0 0.5 0.5 0.5 2.0 2.0 1.0 0.25 1.0 2.0 1.0 1.0 2.0 1.0 1.0 0.5 100 5120 70 625 45 Seed Pokémon 123 1059860 2.0 80 Fushigibanaフシギバナ Venusaur 88.1 3 122 120 80 grass poison 100.0 1 0
3 ['Blaze', 'Solar Power'] 0.5 1.0 1.0 1.0 0.5 1.0 0.5 1.0 1.0 0.50 2.0 0.5 1.0 1.0 1.0 2.0 0.5 2.0 52 5120 70 309 45 Lizard Pokémon 43 1059860 0.6 39 Hitokageヒトカゲ Charmander 88.1 4 60 50 65 fire NaN 8.5 1 0
4 ['Blaze', 'Solar Power'] 0.5 1.0 1.0 1.0 0.5 1.0 0.5 1.0 1.0 0.50 2.0 0.5 1.0 1.0 1.0 2.0 0.5 2.0 64 5120 70 405 45 Flame Pokémon 58 1059860 1.1 58 Lizardoリザード Charmeleon 88.1 5 80 65 80 fire NaN 19.0 1 0
In [427]:
non_legendary = poke_info[poke_info['is_legendary'] == 0]
legendary = poke_info[poke_info['is_legendary'] == 1]
In [314]:
legendary_type = legendary.type1.unique().tolist()
non_legendary_type = non_legendary.type1.unique().tolist()
In [407]:
def pokemon_subset(pokemon_type, data):
    df = data
    pokemon_sub = df[(df['type1'] == pokemon_type) | (df['type2'] == pokemon_type)].drop_duplicates()
    pokemon_type_sub = pokemon_sub[['name','pokedex_number','generation','sp_attack','sp_defense','speed','hp','defense','attack']]
    #print(tabulate(pokemon_type_sub, headers='keys', tablefmt='psql'))
    return(pokemon_type_sub)                                                  
In [410]:
def strongest_pokemon(pokemon_type, data):
    df = pokemon_subset(pokemon_type, data)
    df['total_stats'] = df['sp_attack'] + df['sp_defense'] + df['speed'] + df['hp'] + df['defense'] + df['attack']
    df['type'] = pokemon_type
    #strongest = df[df['total_stats'] == df['total_stats'].max()]
    strongest = df.loc[df['total_stats'].idxmax()].to_frame().transpose()
    strongest = strongest[['name','type','generation','sp_attack','sp_defense','speed','hp','defense','attack','pokedex_number']]
    print(tabulate(strongest[['name','type','generation','sp_attack','sp_defense','speed','hp','defense','attack']], headers='keys', tablefmt='psql'))
    display(image_list[pokedex_no.index(str(int(strongest.pokedex_number)))])
    #return(strongest)
In [411]:
for val in legendary_type:
    df = strongest_pokemon(val,legendary)
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 645 | Kyurem | ice    |            5 |         170 |          100 |      95 |  125 |        90 |      120 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 643 | Zekrom | electric |            5 |         120 |          100 |      90 |  100 |       120 |      150 |
+-----+--------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 249 | Ho-Oh  | fire   |            2 |         110 |          154 |      90 |  106 |        90 |      130 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type    |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+---------+--------------+-------------+--------------+---------+------+-----------+----------|
| 149 | Mewtwo | psychic |            1 |         194 |          120 |     140 |  106 |        70 |      150 |
+-----+--------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 381 | Kyogre | water  |            3 |         180 |          160 |      90 |  100 |        90 |      150 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 718 | Diancie | rock   |            6 |         160 |          110 |     110 |   50 |       110 |      160 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 482 | Dialga | steel  |            4 |         150 |          100 |      90 |  100 |       120 |      120 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 383 | Rayquaza | dragon |            3 |         180 |          100 |     115 |  105 |       100 |      180 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 382 | Groudon | ground |            3 |         150 |           90 |      90 |  100 |       160 |      180 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 492 | Arceus | normal |            4 |         120 |          120 |     120 |  120 |       120 |      120 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 486 | Giratina | ghost  |            4 |         120 |          100 |      90 |  150 |       100 |      120 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 716 | Yveltal | dark   |            6 |         131 |           98 |      99 |  126 |        95 |      131 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 250 | Celebi | grass  |            2 |         100 |          100 |     100 |  100 |       100 |      100 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 383 | Rayquaza | flying |            3 |         180 |          100 |     115 |  105 |       100 |      180 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 648 | Genesect | bug    |            5 |         120 |           95 |      99 |   71 |        95 |      120 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 718 | Diancie | fairy  |            6 |         160 |          110 |     110 |   50 |       110 |      160 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
In [21]:
poke_info.columns
Out[21]:
Index(['abilities', 'against_bug', 'against_dark', 'against_dragon',
       'against_electric', 'against_fairy', 'against_fight', 'against_fire',
       'against_flying', 'against_ghost', 'against_grass', 'against_ground',
       'against_ice', 'against_normal', 'against_poison', 'against_psychic',
       'against_rock', 'against_steel', 'against_water', 'attack',
       'base_egg_steps', 'base_happiness', 'base_total', 'capture_rate',
       'classfication', 'defense', 'experience_growth', 'height_m', 'hp',
       'japanese_name', 'name', 'percentage_male', 'pokedex_number',
       'sp_attack', 'sp_defense', 'speed', 'type1', 'type2', 'weight_kg',
       'generation', 'is_legendary'],
      dtype='object')
In [412]:
for val in non_legendary_type:
    df = strongest_pokemon(val,non_legendary)
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 253 | Sceptile | grass  |            3 |         145 |           85 |     145 |   70 |        75 |      110 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
|  5 | Charizard | fire   |            1 |         159 |          115 |     100 |   78 |        78 |      104 |
+----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 129 | Gyarados | water  |            1 |          70 |          130 |      81 |   95 |       109 |      155 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 126 | Pinsir | bug    |            1 |          65 |           90 |     105 |   65 |       120 |      155 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 288 | Slaking | normal |            3 |          95 |           65 |     100 |  150 |       100 |      160 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
|  2 | Venusaur | poison |            1 |         122 |          120 |      80 |   80 |       123 |      100 |
+----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 180 | Ampharos | electric |            2 |         165 |          110 |      45 |   90 |       105 |       95 |
+-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 444 | Garchomp | ground |            4 |         120 |           95 |      92 |  108 |       115 |      170 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 281 | Gardevoir | fairy  |            3 |         165 |          135 |     100 |   68 |        65 |       85 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 256 | Blaziken | fighting |            3 |         130 |           80 |     100 |   80 |        80 |      160 |
+-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type    |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+---------+--------------+-------------+--------------+---------+------+-----------+----------|
| 375 | Metagross | psychic |            3 |         105 |          110 |     110 |   80 |       150 |      145 |
+-----+-----------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 247 | Tyranitar | rock   |            2 |          95 |          120 |      71 |  100 |       150 |      164 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 93 | Gengar | ghost  |            1 |         170 |           95 |     130 |   60 |        80 |       65 |
+----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 459 | Abomasnow | ice    |            4 |         132 |          105 |      30 |   90 |       105 |      132 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 372 | Salamence | dragon |            3 |         120 |           90 |     120 |   95 |       130 |      145 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 247 | Tyranitar | dark   |            2 |          95 |          120 |      71 |  100 |       150 |      164 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 375 | Metagross | steel  |            3 |         105 |          110 |     110 |   80 |       150 |      145 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 372 | Salamence | flying |            3 |         120 |           90 |     120 |   95 |       130 |      145 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
In [413]:
def generation_mon(gen):
    gen_sub = poke_info[(poke_info['generation'] == gen) & (poke_info['is_legendary'] != 1)]
    for val in non_legendary_type:
        df = strongest_pokemon(val,gen_sub)
    return(df)
In [414]:
gen_list = poke_info.generation.unique().tolist()

for val in gen_list:
    generation_mon(val)
+----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
|  2 | Venusaur | grass  |            1 |         122 |          120 |      80 |   80 |       123 |      100 |
+----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
|  5 | Charizard | fire   |            1 |         159 |          115 |     100 |   78 |        78 |      104 |
+----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 129 | Gyarados | water  |            1 |          70 |          130 |      81 |   95 |       109 |      155 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 126 | Pinsir | bug    |            1 |          65 |           90 |     105 |   65 |       120 |      155 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 114 | Kangaskhan | normal |            1 |          60 |          100 |     100 |  105 |       100 |      125 |
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
|  2 | Venusaur | poison |            1 |         122 |          120 |      80 |   80 |       123 |      100 |
+----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 134 | Jolteon | electric |            1 |         110 |           95 |     130 |   65 |        60 |       65 |
+-----+---------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 30 | Nidoqueen | ground |            1 |          75 |           85 |      76 |   90 |        87 |       92 |
+----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 35 | Clefable | fairy  |            1 |          95 |           90 |      60 |   95 |        73 |       70 |
+----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+----+-----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name      | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+-----------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 61 | Poliwrath | fighting |            1 |          70 |           90 |      70 |   90 |        95 |       95 |
+----+-----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+----+----------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name     | type    |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+----------+---------+--------------+-------------+--------------+---------+------+-----------+----------|
| 64 | Alakazam | psychic |            1 |         175 |          105 |     150 |   55 |        65 |       50 |
+----+----------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 141 | Aerodactyl | rock   |            1 |          70 |           95 |     150 |   80 |        85 |      135 |
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 93 | Gengar | ghost  |            1 |         170 |           95 |     130 |   60 |        80 |       65 |
+----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 130 | Lapras | ice    |            1 |          85 |           95 |      60 |  130 |        80 |       85 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 148 | Dragonite | dragon |            1 |         100 |          100 |      80 |   91 |        95 |      134 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 52 | Persian | dark   |            1 |          75 |           65 |     115 |   65 |        60 |       60 |
+----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|    | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 81 | Magneton | steel  |            1 |         120 |           70 |      70 |   50 |        95 |       60 |
+----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 129 | Gyarados | flying |            1 |          70 |          130 |      81 |   95 |       109 |      155 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 153 | Meganium | grass  |            2 |          83 |          100 |      80 |   80 |       100 |       82 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 228 | Houndoom | fire   |            2 |         140 |           90 |     115 |   75 |        90 |       90 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 229 | Kingdra | water  |            2 |          95 |           95 |      85 |   75 |        95 |       95 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 211 | Scizor | bug    |            2 |          65 |          100 |      75 |   70 |       140 |      150 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 241 | Blissey | normal |            2 |          75 |          135 |      55 |  255 |        10 |       10 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 168 | Crobat | poison |            2 |          70 |           80 |     130 |   85 |        80 |       90 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 180 | Ampharos | electric |            2 |         165 |          110 |      45 |   90 |       105 |       95 |
+-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 207 | Steelix | ground |            2 |          55 |           95 |      30 |   75 |       230 |      125 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 209 | Granbull | fairy  |            2 |          60 |           60 |      45 |   90 |        75 |      120 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 213 | Heracross | fighting |            2 |          40 |          105 |      75 |   80 |       115 |      185 |
+-----+-----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type    |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+---------+--------------+-------------+--------------+---------+------+-----------+----------|
| 195 | Espeon | psychic |            2 |         130 |           95 |     110 |   65 |        60 |       65 |
+-----+--------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 247 | Tyranitar | rock   |            2 |          95 |          120 |      71 |  100 |       150 |      164 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 199 | Misdreavus | ghost  |            2 |          85 |           85 |      85 |   60 |        60 |       60 |
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 220 | Piloswine | ice    |            2 |          60 |           60 |      50 |  100 |        80 |      100 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 229 | Kingdra | dragon |            2 |          95 |           95 |      85 |   75 |        95 |       95 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 247 | Tyranitar | dark   |            2 |          95 |          120 |      71 |  100 |       150 |      164 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 207 | Steelix | steel  |            2 |          55 |           95 |      30 |   75 |       230 |      125 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 168 | Crobat | flying |            2 |          70 |           80 |     130 |   85 |        80 |       90 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 253 | Sceptile | grass  |            3 |         145 |           85 |     145 |   70 |        75 |      110 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 256 | Blaziken | fire   |            3 |         130 |           80 |     100 |   80 |        80 |      160 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 259 | Swampert | water  |            3 |          95 |          110 |      70 |  100 |       110 |      150 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 347 | Armaldo | bug    |            3 |          70 |           80 |      45 |   75 |       100 |      125 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 288 | Slaking | normal |            3 |          95 |           65 |     100 |  150 |       100 |      160 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 316 | Swalot | poison |            3 |          73 |           83 |      55 |  100 |        83 |       73 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 309 | Manectric | electric |            3 |         135 |           80 |     135 |   70 |        80 |       75 |
+-----+-----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 259 | Swampert | ground |            3 |          95 |          110 |      70 |  100 |       110 |      150 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 281 | Gardevoir | fairy  |            3 |         165 |          135 |     100 |   68 |        65 |       85 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 256 | Blaziken | fighting |            3 |         130 |           80 |     100 |   80 |        80 |      160 |
+-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type    |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+---------+--------------+-------------+--------------+---------+------+-----------+----------|
| 375 | Metagross | psychic |            3 |         105 |          110 |     110 |   80 |       150 |      145 |
+-----+-----------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 305 | Aggron | rock   |            3 |          60 |           80 |      50 |   70 |       230 |      140 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 353 | Banette | ghost  |            3 |          93 |           83 |      75 |   64 |        75 |      165 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 361 | Glalie | ice    |            3 |         120 |           80 |     100 |   80 |        80 |      120 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 372 | Salamence | dragon |            3 |         120 |           90 |     120 |   95 |       130 |      145 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 358 | Absol  | dark   |            3 |         115 |           60 |     115 |   65 |        60 |      150 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 375 | Metagross | steel  |            3 |         105 |          110 |     110 |   80 |       150 |      145 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 372 | Salamence | flying |            3 |         120 |           90 |     120 |   95 |       130 |      145 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 459 | Abomasnow | grass  |            4 |         132 |          105 |      30 |   90 |       105 |      132 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 466 | Magmortar | fire   |            4 |         125 |           95 |      83 |   75 |        67 |       95 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 394 | Empoleon | water  |            4 |         111 |          101 |      60 |   84 |        88 |       86 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 468 | Yanmega | bug    |            4 |         116 |           56 |      95 |   86 |        86 |       76 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 427 | Lopunny | normal |            4 |          54 |           96 |     135 |   65 |        94 |      136 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 406 | Roserade | poison |            4 |         125 |          105 |      90 |   60 |        65 |       70 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 465 | Electivire | electric |            4 |          95 |           85 |      95 |   75 |        67 |      123 |
+-----+------------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 444 | Garchomp | ground |            4 |         120 |           95 |      92 |  108 |       115 |      170 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 467 | Togekiss | fairy  |            4 |         120 |          115 |      80 |   85 |        95 |       50 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 447 | Lucario | fighting |            4 |         140 |           70 |     112 |   70 |        88 |      145 |
+-----+---------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type    |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+---------+--------------+-------------+--------------+---------+------+-----------+----------|
| 474 | Gallade | psychic |            4 |          65 |          115 |     110 |   68 |        95 |      165 |
+-----+---------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 463 | Rhyperior | rock   |            4 |          55 |           55 |      40 |  115 |       130 |      140 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 476 | Dusknoir | ghost  |            4 |          65 |          135 |      45 |   45 |       135 |      100 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 459 | Abomasnow | ice    |            4 |         132 |          105 |      30 |   90 |       105 |      132 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 444 | Garchomp | dragon |            4 |         120 |           95 |      92 |  108 |       115 |      170 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 460 | Weavile | dark   |            4 |          45 |           85 |     125 |   70 |        65 |      120 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 447 | Lucario | steel  |            4 |         140 |           70 |     112 |   70 |        88 |      145 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 467 | Togekiss | flying |            4 |         120 |          115 |      80 |   85 |        95 |       50 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 496 | Serperior | grass  |            5 |          75 |           95 |     113 |   75 |        95 |       75 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 636 | Volcarona | fire   |            5 |         135 |          105 |     100 |   85 |        65 |       60 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 502 | Samurott | water  |            5 |         108 |           70 |      70 |   95 |        85 |      100 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 636 | Volcarona | bug    |            5 |         135 |          105 |     100 |   85 |        65 |       60 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 530 | Audino | normal |            5 |          80 |          126 |      50 |  103 |       126 |       60 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 544 | Scolipede | poison |            5 |          55 |           69 |     112 |   60 |        89 |      100 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 603 | Eelektross | electric |            5 |         105 |           80 |      50 |   85 |        80 |      115 |
+-----+------------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 552 | Krookodile | ground |            5 |          65 |           70 |      92 |   95 |        80 |      117 |
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 546 | Whimsicott | fairy  |            5 |          77 |           75 |     116 |   60 |        85 |       67 |
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 499 | Emboar | fighting |            5 |         100 |           65 |      65 |  110 |        65 |      123 |
+-----+--------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type    |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+---------+--------------+-------------+--------------+---------+------+-----------+----------|
| 560 | Sigilyph | psychic |            5 |         103 |           80 |      97 |   72 |        80 |       58 |
+-----+----------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 566 | Archeops | rock   |            5 |         112 |           65 |     110 |   75 |        65 |      140 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 608 | Chandelure | ghost  |            5 |         145 |           90 |      80 |   60 |        90 |       55 |
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 583 | Vanilluxe | ice    |            5 |         110 |           95 |      79 |   71 |        85 |       95 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 634 | Hydreigon | dragon |            5 |         125 |           90 |      98 |   92 |        90 |      105 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 634 | Hydreigon | dark   |            5 |         125 |           90 |      98 |   92 |        90 |      105 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 600 | Klinklang | steel  |            5 |          70 |           85 |      90 |   60 |       115 |      100 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 566 | Archeops | flying |            5 |         112 |           65 |     110 |   75 |        65 |      140 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 672 | Gogoat | grass  |            6 |          97 |           81 |      68 |  123 |        62 |      100 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 654 | Delphox | fire   |            6 |         114 |          100 |     104 |   75 |        72 |       69 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 657 | Greninja | water  |            6 |         153 |           71 |     132 |   72 |        67 |      145 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 665 | Vivillon | bug    |            6 |          90 |           50 |      89 |   80 |        50 |       52 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 667 | Pyroar | normal |            6 |         109 |           66 |     106 |   86 |        72 |       68 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 690 | Dragalge | poison |            6 |          97 |          123 |      44 |   65 |        90 |       75 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 694 | Heliolisk | electric |            6 |         109 |           94 |     109 |   62 |        52 |       55 |
+-----+-----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 659 | Diggersby | ground |            6 |          50 |           77 |      78 |   85 |        77 |       56 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 670 | Florges | fairy  |            6 |         112 |          154 |      75 |   78 |        68 |       65 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 651 | Chesnaught | fighting |            6 |          74 |           75 |      64 |   88 |       122 |      107 |
+-----+------------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type    |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+---------+--------------+-------------+--------------+---------+------+-----------+----------|
| 654 | Delphox | psychic |            6 |         114 |          100 |     104 |   75 |        72 |       69 |
+-----+---------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 696 | Tyrantrum | rock   |            6 |          69 |           59 |      71 |   82 |       119 |      121 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 680 | Aegislash | ghost  |            6 |         150 |           50 |      60 |   60 |        50 |      150 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 698 | Aurorus | ice    |            6 |          99 |           92 |      58 |  123 |        72 |       77 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 705 | Goodra | dragon |            6 |         110 |          150 |      80 |   90 |        70 |      100 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 657 | Greninja | dark   |            6 |         153 |           71 |     132 |   72 |        67 |      145 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 680 | Aegislash | steel  |            6 |         150 |           50 |      60 |   60 |        50 |      150 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 714 | Noivern | flying |            6 |          97 |           80 |     123 |   85 |        80 |       70 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 723 | Decidueye | grass  |            7 |         100 |          100 |      70 |   78 |        75 |      107 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 726 | Incineroar | fire   |            7 |          80 |           90 |      60 |   95 |        90 |      115 |
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 745 | Wishiwashi | water  |            7 |         140 |          135 |      30 |   45 |       130 |      140 |
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 767 | Golisopod | bug    |            7 |          60 |           90 |      40 |   75 |       140 |      125 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 772 | Silvally | normal |            7 |          95 |           95 |      95 |   95 |        95 |       95 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 747 | Toxapex | poison |            7 |          53 |          142 |      35 |   50 |       152 |       63 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 737 | Vikavolt | electric |            7 |         145 |           75 |      43 |   77 |        90 |       70 |
+-----+----------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 749 | Mudsdale | ground |            7 |          55 |           85 |      35 |  100 |       100 |      125 |
+-----+----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 729 | Primarina | fairy  |            7 |         126 |          116 |      60 |   80 |        74 |       74 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type     |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+----------+--------------+-------------+--------------+---------+------+-----------+----------|
| 783 | Kommo-o | fighting |            7 |         100 |          105 |      85 |   75 |       125 |      110 |
+-----+---------+----------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+----------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name     | type    |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+----------+---------+--------------+-------------+--------------+---------+------+-----------+----------|
| 764 | Oranguru | psychic |            7 |          90 |          110 |      60 |   90 |        80 |       60 |
+-----+----------+---------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 773 | Minior | rock   |            7 |         100 |           60 |     120 |   60 |        60 |      100 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name      | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 723 | Decidueye | ghost  |            7 |         100 |          100 |      70 |   78 |        75 |      107 |
+-----+-----------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name         | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 739 | Crabominable | ice    |            7 |          62 |           67 |      43 |   97 |        77 |      132 |
+-----+--------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name    | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 783 | Kommo-o | dragon |            7 |         100 |          105 |      85 |   75 |       125 |      110 |
+-----+---------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 726 | Incineroar | dark   |            7 |          80 |           90 |      60 |   95 |        90 |      115 |
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name       | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 776 | Togedemaru | steel  |            7 |          40 |           73 |      96 |   65 |        63 |       98 |
+-----+------------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
|     | name   | type   |   generation |   sp_attack |   sp_defense |   speed |   hp |   defense |   attack |
|-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------|
| 773 | Minior | flying |            7 |         100 |           60 |     120 |   60 |        60 |      100 |
+-----+--------+--------+--------------+-------------+--------------+---------+------+-----------+----------+
In [429]:
non_legendary.head()
non_legendary_mod = non_legendary
In [434]:
import warnings
warnings.filterwarnings('ignore')

non_legendary_mod['total_weakness'] = non_legendary_mod['against_bug'] + non_legendary_mod['against_dark'] + \
non_legendary_mod['against_dragon'] + non_legendary_mod['against_electric'] + non_legendary_mod['against_fairy'] + \
non_legendary_mod['against_fight'] + non_legendary_mod['against_fire'] + non_legendary_mod['against_flying'] + \
non_legendary_mod['against_ghost'] + non_legendary_mod['against_grass'] + non_legendary_mod['against_ground'] + \
non_legendary_mod['against_ice'] + non_legendary_mod['against_normal'] + non_legendary_mod['against_poison'] + \
non_legendary_mod['against_psychic'] + non_legendary_mod['against_rock'] + non_legendary_mod['against_steel'] + \
non_legendary_mod['against_water']
In [444]:
weakest_mon = non_legendary_mod.loc[non_legendary_mod['total_weakness'].idxmax()].to_frame().transpose()
weakest_mon = weakest_mon[['name','pokedex_number','generation','classfication','type1','type2','total_weakness']]
print(tabulate(weakest_mon, headers='keys', tablefmt='psql'))
display(image_list[pokedex_no.index(str(int(weakest_mon.pokedex_number)))])
+-----+--------+------------------+--------------+-----------------+---------+---------+------------------+
|     | name   |   pokedex_number |   generation | classfication   | type1   | type2   |   total_weakness |
|-----+--------+------------------+--------------+-----------------+---------+---------+------------------|
| 697 | Amaura |              698 |            6 | Tundra Pokémon  | rock    | ice     |               26 |
+-----+--------+------------------+--------------+-----------------+---------+---------+------------------+
In [447]:
strongest_mon = non_legendary_mod.loc[non_legendary_mod['total_weakness'].idxmin()].to_frame().transpose()
strongest_mon = strongest_mon[['name','pokedex_number','generation','classfication','type1','type2','total_weakness']]
print(tabulate(strongest_mon, headers='keys', tablefmt='psql'))
display(image_list[pokedex_no.index(str(int(strongest_mon.pokedex_number)))])
+-----+--------+------------------+--------------+------------------+---------+---------+------------------+
|     | name   |   pokedex_number |   generation | classfication    | type1   | type2   |   total_weakness |
|-----+--------+------------------+--------------+------------------+---------+---------+------------------|
| 302 | Mawile |              303 |            3 | Deceiver Pokémon | steel   | fairy   |            13.25 |
+-----+--------+------------------+--------------+------------------+---------+---------+------------------+
In [451]:
heaviest = non_legendary_mod.loc[non_legendary_mod['weight_kg'].idxmax()].to_frame().transpose()
heaviest = heaviest[['name','pokedex_number','generation','classfication','type1','type2','weight_kg']]
print(tabulate(heaviest, headers='keys', tablefmt='psql'))
display(image_list[pokedex_no.index(str(int(heaviest.pokedex_number)))])
+-----+----------+------------------+--------------+---------------------+---------+---------+-------------+
|     | name     |   pokedex_number |   generation | classfication       | type1   |   type2 |   weight_kg |
|-----+----------+------------------+--------------+---------------------+---------+---------+-------------|
| 749 | Mudsdale |              750 |            7 | Draft Horse Pokémon | ground  |     nan |         920 |
+-----+----------+------------------+--------------+---------------------+---------+---------+-------------+
In [452]:
lightest = non_legendary_mod.loc[non_legendary_mod['weight_kg'].idxmin()].to_frame().transpose()
lightest = lightest[['name','pokedex_number','generation','classfication','type1','type2','weight_kg']]
print(tabulate(lightest, headers='keys', tablefmt='psql'))
display(image_list[pokedex_no.index(str(int(lightest.pokedex_number)))])
+----+--------+------------------+--------------+-----------------+---------+---------+-------------+
|    | name   |   pokedex_number |   generation | classfication   | type1   | type2   |   weight_kg |
|----+--------+------------------+--------------+-----------------+---------+---------+-------------|
| 91 | Gastly |               92 |            1 | Gas Pokémon     | ghost   | poison  |         0.1 |
+----+--------+------------------+--------------+-----------------+---------+---------+-------------+
In [454]:
tallest = non_legendary_mod.loc[non_legendary_mod['height_m'].idxmax()].to_frame().transpose()
tallest = tallest[['name','pokedex_number','generation','classfication','type1','type2','height_m']]
print(tabulate(tallest, headers='keys', tablefmt='psql'))
display(image_list[pokedex_no.index(str(int(tallest.pokedex_number)))])
+-----+---------+------------------+--------------+---------------------+---------+---------+------------+
|     | name    |   pokedex_number |   generation | classfication       | type1   |   type2 |   height_m |
|-----+---------+------------------+--------------+---------------------+---------+---------+------------|
| 320 | Wailord |              321 |            3 | Float Whale Pokémon | water   |     nan |       14.5 |
+-----+---------+------------------+--------------+---------------------+---------+---------+------------+
In [455]:
shortest = non_legendary_mod.loc[non_legendary_mod['height_m'].idxmin()].to_frame().transpose()
shortest = shortest[['name','pokedex_number','generation','classfication','type1','type2','height_m']]
print(tabulate(shortest, headers='keys', tablefmt='psql'))
display(image_list[pokedex_no.index(str(int(shortest.pokedex_number)))])
+-----+--------+------------------+--------------+-------------------+---------+----------+------------+
|     | name   |   pokedex_number |   generation | classfication     | type1   | type2    |   height_m |
|-----+--------+------------------+--------------+-------------------+---------+----------+------------|
| 594 | Joltik |              595 |            5 | Attaching Pokémon | bug     | electric |        0.1 |
+-----+--------+------------------+--------------+-------------------+---------+----------+------------+
In [458]:
non_legendary.head()
Out[458]:
abilities against_bug against_dark against_dragon against_electric against_fairy against_fight against_fire against_flying against_ghost against_grass against_ground against_ice against_normal against_poison against_psychic against_rock against_steel against_water attack base_egg_steps base_happiness base_total capture_rate classfication defense experience_growth height_m hp japanese_name name percentage_male pokedex_number sp_attack sp_defense speed type1 type2 weight_kg generation is_legendary total_weakness
0 ['Overgrow', 'Chlorophyll'] 1.0 1.0 1.0 0.5 0.5 0.5 2.0 2.0 1.0 0.25 1.0 2.0 1.0 1.0 2.0 1.0 1.0 0.5 49.0 5120.0 70.0 318.0 45 Seed Pokémon 49.0 1059860.0 0.7 45.0 Fushigidaneフシギダネ Bulbasaur 88.1 1.0 65.0 65.0 45.0 grass poison 6.9 1.0 0.0 19.25
1 ['Overgrow', 'Chlorophyll'] 1.0 1.0 1.0 0.5 0.5 0.5 2.0 2.0 1.0 0.25 1.0 2.0 1.0 1.0 2.0 1.0 1.0 0.5 62.0 5120.0 70.0 405.0 45 Seed Pokémon 63.0 1059860.0 1.0 60.0 Fushigisouフシギソウ Ivysaur 88.1 2.0 80.0 80.0 60.0 grass poison 13.0 1.0 0.0 19.25
2 ['Overgrow', 'Chlorophyll'] 1.0 1.0 1.0 0.5 0.5 0.5 2.0 2.0 1.0 0.25 1.0 2.0 1.0 1.0 2.0 1.0 1.0 0.5 100.0 5120.0 70.0 625.0 45 Seed Pokémon 123.0 1059860.0 2.0 80.0 Fushigibanaフシギバナ Venusaur 88.1 3.0 122.0 120.0 80.0 grass poison 100.0 1.0 0.0 19.25
3 ['Blaze', 'Solar Power'] 0.5 1.0 1.0 1.0 0.5 1.0 0.5 1.0 1.0 0.50 2.0 0.5 1.0 1.0 1.0 2.0 0.5 2.0 52.0 5120.0 70.0 309.0 45 Lizard Pokémon 43.0 1059860.0 0.6 39.0 Hitokageヒトカゲ Charmander 88.1 4.0 60.0 50.0 65.0 fire NaN 8.5 1.0 0.0 18.00
4 ['Blaze', 'Solar Power'] 0.5 1.0 1.0 1.0 0.5 1.0 0.5 1.0 1.0 0.50 2.0 0.5 1.0 1.0 1.0 2.0 0.5 2.0 64.0 5120.0 70.0 405.0 45 Flame Pokémon 58.0 1059860.0 1.1 58.0 Lizardoリザード Charmeleon 88.1 5.0 80.0 65.0 80.0 fire NaN 19.0 1.0 0.0 18.00
In [465]:
non_legendary_mon1 = non_legendary[['type1','name']]
non_legendary_mon2 = non_legendary[['type2','name']]
type1 = non_legendary_mon1.groupby(['type1']).count().reset_index()
type2 = non_legendary_mon2.groupby(['type2']).count().reset_index()
In [473]:
type_mons = type1.merge(type2, left_on='type1', right_on='type2', how='outer')
type_mons['no_of_mons'] = type_mons['name_x'] + type_mons['name_y']
type_mons = type_mons[['type1','no_of_mons']]
In [486]:
type_mons.transpose()
Out[486]:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
type1 bug dark dragon electric fairy fighting fire flying ghost grass ground ice normal poison psychic rock steel water
no_of_mons 74 47 33 42 40 47 58 87 38 92 63 35 106 65 61 55 36 124
In [484]:
import matplotlib.pyplot as plt; plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

type_mons.plot.barh(x='type1', y='no_of_mons', rot=1, color = 'steelblue')
plt.show()
In [494]:
legendary_mon1 = legendary[['type1','name']]
legendary_mon2 = legendary[['type2','name']]
type1 = legendary_mon1.groupby(['type1']).count().reset_index()
type2 = legendary_mon2.groupby(['type2']).count().reset_index()
In [495]:
type_mons = type1.merge(type2, left_on='type1', right_on='type2', how='outer')
type_mons['no_of_mons'] = type_mons['name_x'] + type_mons['name_y']
type_mons = type_mons[['type1','no_of_mons']]
In [507]:
type_mons = type_mons[pd.notnull(type_mons['type1'])]
type_mons.transpose().fillna(0)
Out[507]:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
type1 bug dark dragon electric fairy fire flying ghost grass ground ice normal psychic rock steel water
no_of_mons 0 0 11 6 7 7 11 3 6 3 3 0 21 0 10 7
In [508]:
type_mons.plot.barh(x='type1', y='no_of_mons', rot=1, color = 'steelblue')
plt.show()
In [606]:
#perform clustering to see if all pokemon are classified based on tyoe properly
#perform some predictions to see if a regulr pokemon can be legendary based on features?
#poke_info['abilities'][0].strip('\"')
#poke_info['abilities'].unique()
#poke_info['capture_rate'].unique()
poke_info.capture_rate.iloc[[773]] = '255'
poke_info['capture_rate'].unique()
Out[606]:
array(['45', '255', '120', '127', '90', '190', '75', '235', '150', '25',
       '170', '50', '200', '100', '180', '60', '225', '30', '35', '3',
       '65', '70', '125', '205', '155', '145', '130', '140', '15', '220',
       '160', '80', '55'], dtype=object)
In [607]:
poke_info_ml = poke_info[['against_bug', 'against_dark', 'against_dragon',
       'against_electric', 'against_fairy', 'against_fight', 'against_fire',
       'against_flying', 'against_ghost', 'against_grass', 'against_ground',
       'against_ice', 'against_normal', 'against_poison', 'against_psychic',
       'against_rock', 'against_steel', 'against_water', 'attack',
       'base_egg_steps', 'base_happiness', 'base_total', 'capture_rate',
       'defense', 'experience_growth', 'height_m', 'hp',
       'sp_attack', 'sp_defense', 'speed', 'weight_kg',
       'is_legendary']]
In [608]:
poke_info_ml.head()
poke_info_ml_clean = poke_info_ml.dropna()
len(poke_info_ml_clean)
Out[608]:
781
In [609]:
data_final_vars=poke_info_ml_clean.columns.values.tolist()
Y=['is_legendary']
X=[i for i in data_final_vars if i not in Y]
In [610]:
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

logreg = LogisticRegression()

rfe = RFE(logreg, 18)
rfe = rfe.fit(poke_info_ml_clean[X], poke_info_ml_clean[Y] )
print(rfe.support_)
print(rfe.ranking_)
[ True  True  True False False  True False False False  True False  True
 False False False False False False  True  True  True  True  True  True
  True False  True  True  True  True  True]
[ 1  1  1  8  3  1  7  4 14  1 10  1  9 13  6  2 11  5  1  1  1  1  1  1
  1 12  1  1  1  1  1]
In [617]:
poke_info_ml_useful = poke_info[['against_bug', 'against_dark', 'against_dragon',
       'against_fight',
       'against_grass',
       'against_ice',
       'attack',
       'base_egg_steps', 'base_happiness', 'base_total', 'capture_rate',
       'defense', 'experience_growth', 'hp',
       'sp_attack', 'sp_defense', 'speed', 'weight_kg',
       'is_legendary']]
poke_info_ml_useful.head()
Out[617]:
against_bug against_dark against_dragon against_fight against_grass against_ice attack base_egg_steps base_happiness base_total capture_rate defense experience_growth hp sp_attack sp_defense speed weight_kg is_legendary
0 1.0 1.0 1.0 0.5 0.25 2.0 49 5120 70 318 45 49 1059860 45 65 65 45 6.9 0
1 1.0 1.0 1.0 0.5 0.25 2.0 62 5120 70 405 45 63 1059860 60 80 80 60 13.0 0
2 1.0 1.0 1.0 0.5 0.25 2.0 100 5120 70 625 45 123 1059860 80 122 120 80 100.0 0
3 0.5 1.0 1.0 1.0 0.50 0.5 52 5120 70 309 45 43 1059860 39 60 50 65 8.5 0
4 0.5 1.0 1.0 1.0 0.50 0.5 64 5120 70 405 45 58 1059860 58 80 65 80 19.0 0
In [631]:
#poke_info_ml_useful.head()
poke_info_ml_useful.dtypes
Out[631]:
against_bug           float64
against_dark          float64
against_dragon        float64
against_fight         float64
against_grass         float64
against_ice           float64
attack                  int64
base_egg_steps          int64
base_happiness          int64
base_total              int64
capture_rate            int64
defense                 int64
experience_growth       int64
hp                      int64
sp_attack               int64
sp_defense              int64
speed                   int64
weight_kg             float64
is_legendary         category
dtype: object
In [630]:
poke_info_ml_useful[['against_bug', 'against_dark', 'against_dragon',
       'against_fight',
       'against_grass',
       'against_ice',
       'attack',
       'base_egg_steps', 'base_happiness', 'base_total', 'capture_rate',
       'defense', 'experience_growth', 'hp',
       'sp_attack', 'sp_defense', 'speed', 'weight_kg']] = poke_info_ml_useful[['against_bug', 'against_dark', 'against_dragon',
       'against_fight',
       'against_grass',
       'against_ice',
       'attack',
       'base_egg_steps', 'base_happiness', 'base_total', 'capture_rate',
       'defense', 'experience_growth', 'hp',
       'sp_attack', 'sp_defense', 'speed', 'weight_kg']].apply(pd.to_numeric)

poke_info_ml_useful[['is_legendary']] = poke_info_ml_useful[['is_legendary']].astype('category')
In [632]:
poke_info_ml_useful_vars = poke_info_ml_useful.columns.values.tolist()
Y=['is_legendary']
X=[i for i in poke_info_ml_useful_vars if i not in Y]
In [641]:
poke_info_ml_useful = poke_info_ml_useful.dropna()
len(poke_info_ml_useful)
Out[641]:
781
In [665]:
import statsmodels.api as sm
logit_model=sm.Logit(poke_info_ml_useful[Y],poke_info_ml_useful[X])
result=logit_model.fit()
print(result.summary())
Optimization terminated successfully.
         Current function value: 0.041552
         Iterations 33
                           Logit Regression Results                           
==============================================================================
Dep. Variable:           is_legendary   No. Observations:                  781
Model:                          Logit   Df Residuals:                      764
Method:                           MLE   Df Model:                           16
Date:                Mon, 10 Sep 2018   Pseudo R-squ.:                  0.8609
Time:                        00:44:49   Log-Likelihood:                -32.452
converged:                       True   LL-Null:                       -233.28
                                        LLR p-value:                 1.631e-75
=====================================================================================
                        coef    std err          z      P>|z|      [0.025      0.975]
-------------------------------------------------------------------------------------
against_bug           0.5552      1.012      0.548      0.583      -1.429       2.539
against_dark         -2.5488      0.851     -2.994      0.003      -4.217      -0.880
against_dragon       -2.6153      0.949     -2.755      0.006      -4.476      -0.755
against_fight        -2.4059      0.990     -2.431      0.015      -4.346      -0.466
against_grass        -0.1573      0.669     -0.235      0.814      -1.468       1.154
against_ice          -1.2348      0.786     -1.570      0.116      -2.776       0.307
attack                0.0031        nan        nan        nan         nan         nan
base_egg_steps        0.0004   7.27e-05      5.918      0.000       0.000       0.001
base_happiness        0.0003      0.016      0.021      0.983      -0.030       0.031
base_total            0.0028        nan        nan        nan         nan         nan
capture_rate         -0.0362      0.009     -4.155      0.000      -0.053      -0.019
defense               0.0154        nan        nan        nan         nan         nan
experience_growth  4.183e-07    2.2e-06      0.190      0.849    -3.9e-06    4.73e-06
hp                   -0.0094        nan        nan        nan         nan         nan
sp_attack             0.0090        nan        nan        nan         nan         nan
sp_defense           -0.0206        nan        nan        nan         nan         nan
speed                 0.0050        nan        nan        nan         nan         nan
weight_kg             0.0031      0.004      0.756      0.450      -0.005       0.011
=====================================================================================

Possibly complete quasi-separation: A fraction 0.34 of observations can be
perfectly predicted. This might indicate that there is complete
quasi-separation. In this case some parameters will not be identified.
In [656]:
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(poke_info_ml_useful[X], np.ravel(poke_info_ml_useful[Y]), test_size=0.3, random_state=0)
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
logreg = LogisticRegression()
logreg.fit(X_train, y_train)
Out[656]:
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
          verbose=0, warm_start=False)
In [657]:
y_pred = logreg.predict(X_test)
print('Accuracy of logistic regression classifier on test set: {:.2f}'.format(logreg.score(X_test, y_test)))
Accuracy of logistic regression classifier on test set: 0.98
In [661]:
len(X_train)
len(X_test)
Out[661]:
235
In [666]:
from sklearn import model_selection
from sklearn.model_selection import cross_val_score

kfold = model_selection.KFold(n_splits=10, random_state=7)
modelCV = LogisticRegression()
scoring = 'accuracy'
results = model_selection.cross_val_score(modelCV, X_train, y_train, cv=kfold, scoring=scoring)
print("10-fold cross validation average accuracy: %.3f" % (results.mean()))
10-fold cross validation average accuracy: 0.991
In [667]:
from sklearn.metrics import confusion_matrix
confusion_matrix = confusion_matrix(y_test, y_pred)
print(confusion_matrix)
[[208   1]
 [  3  23]]
In [688]:
tp = confusion_matrix[0][0]
fp = confusion_matrix[0][1]
fn = confusion_matrix[1][0]
tn = confusion_matrix[1][1]
In [694]:
accuracy = (tp + tn)/(tp + tn + fp + fn)
print("Accuracy: " + str(round(accuracy*100,2)) + "%")

precision = (tp)/(tp + fp)
print("Precision: " + str(round(precision*100,2)) + "%")

recall = (tp)/(tp + fn)
print("Recall: " + str(round(recall*100,2)) + "%")

f1_score = (2*precision*recall)/(precision + recall)
print("F1 Score: " + str(round(f1_score*100,2)) + "%")
Accuracy: 98.3%
Precision: 99.52%
Recall: 98.58%
F1 Score: 99.05%
In [668]:
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
             precision    recall  f1-score   support

          0       0.99      1.00      0.99       209
          1       0.96      0.88      0.92        26

avg / total       0.98      0.98      0.98       235

In [669]:
from sklearn.metrics import roc_auc_score
from sklearn.metrics import roc_curve
logit_roc_auc = roc_auc_score(y_test, logreg.predict(X_test))
fpr, tpr, thresholds = roc_curve(y_test, logreg.predict_proba(X_test)[:,1])
plt.figure()
plt.plot(fpr, tpr, label='Logistic Regression (area = %0.2f)' % logit_roc_auc)
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic')
plt.legend(loc="lower right")
plt.savefig('Log_ROC')
plt.show()
In [695]:
X_test
pd.DataFrame(y_test)
pd.DataFrame(y_pred)

X_test['y_test'] = Series(y_test, index=X_test.index)
X_test['y_pred'] = Series(y_pred, index=X_test.index)
X_test.head()

#find which ones were wrongly classified
Out[695]:
against_bug against_dark against_dragon against_fight against_grass against_ice attack base_egg_steps base_happiness base_total capture_rate defense experience_growth hp sp_attack sp_defense speed weight_kg y_test y_pred
400 1.0 1.0 1.0 0.50 0.50 1.0 25 3840 70 194 255 41 1059860 37 25 41 25 2.2 0 0
505 1.0 1.0 1.0 2.00 1.00 1.0 60 3840 70 275 255 45 1059860 45 25 45 55 4.1 0 0
369 1.0 1.0 1.0 1.00 2.00 0.5 30 5120 70 330 225 55 800000 43 40 65 97 8.7 0 0
14 0.5 1.0 1.0 0.25 0.25 1.0 150 3840 70 495 45 40 1000000 65 15 80 145 29.5 0 0
163 0.5 1.0 1.0 1.00 0.50 2.0 50 3840 70 452 90 50 1000000 100 86 96 70 40.8 0 0
In [732]:
wrongly_classified = X_test[(X_test['y_pred'] == 0) & (X_test['y_test'] == 1)].index.values
In [731]:
for index_val in wrongly_classified:
    print(tabulate(poke_info[['name','pokedex_number','type1','type2','generation']].iloc[index_val].to_frame().transpose(), headers='keys', tablefmt='psql'))
+-----+-----------+------------------+---------+---------+--------------+
|     | name      |   pokedex_number | type1   | type2   |   generation |
|-----+-----------+------------------+---------+---------+--------------|
| 785 | Tapu Lele |              786 | psychic | fairy   |            7 |
+-----+-----------+------------------+---------+---------+--------------+
+-----+---------+------------------+---------+---------+--------------+
|     | name    |   pokedex_number | type1   | type2   |   generation |
|-----+---------+------------------+---------+---------+--------------|
| 718 | Diancie |              719 | rock    | fairy   |            6 |
+-----+---------+------------------+---------+---------+--------------+
+-----+---------+------------------+---------+---------+--------------+
|     | name    |   pokedex_number | type1   |   type2 |   generation |
|-----+---------+------------------+---------+---------+--------------|
| 489 | Manaphy |              490 | water   |     nan |            4 |
+-----+---------+------------------+---------+---------+--------------+
In [733]:
wrongly_classified_non_leg = X_test[(X_test['y_pred'] == 1) & (X_test['y_test'] == 0)].index.values
for index_val in wrongly_classified_non_leg:
    print(tabulate(poke_info[['name','pokedex_number','type1','type2','generation']].iloc[index_val].to_frame().transpose(), headers='keys', tablefmt='psql'))
+-----+----------+------------------+---------+---------+--------------+
|     | name     |   pokedex_number | type1   |   type2 |   generation |
|-----+----------+------------------+---------+---------+--------------|
| 772 | Silvally |              773 | normal  |     nan |            7 |
+-----+----------+------------------+---------+---------+--------------+